package org.hoemwork.datasouce;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
import javax.sql.DataSource;
import java.util.Map;

public class MyRoutingDataSource extends AbstractRoutingDataSource {

    //保存每个线程要用的数据源名称
    private static ThreadLocal datasource = new ThreadLocal<>();

    public MyRoutingDataSource(DataSource defaultTargetDataSource, Map<Object, Object> targetDataSources) {
        // 设置默认数据源
        super.setDefaultTargetDataSource(defaultTargetDataSource);
        // 设置多数据源. key value的形式
        super.setTargetDataSources(targetDataSources);
        super.afterPropertiesSet();
    }

    //重写方法，spring通过这个方法返回要用的数据源名字，他是一个key要通过这个名字去构造方法的map里找DataSource实例
    @Override
    protected Object determineCurrentLookupKey() {
        return datasource.get();
    }


    public static void clear () {
        datasource.remove();
    }

    public static void set(Object dataSourceKey) {
        datasource.set(dataSourceKey);
    }

}

